查看原文
其他

老生常谈:漫无止境的坐标系(1)理论篇【2018-001】


Highlights

1、一个地理坐标系可以对应多个投影坐标系;

2、一个投影坐标系只能对应一个地理坐标系;

3、地理坐标系和与之对应的投影坐标系等价

4、常用坐标系至少应记住43263857这俩;

5、所有空间数据分析前都应设置投影坐标系;

6、数据的真实坐标坐标属性不一致=错误

7、分享一个ArcGIS在线地图插件SimpleGIS


嗨~多磨,我是···算了,不要开场白了。今天开始聊一个老生常谈的跨学科概念——坐标系。目的有三个,第一,出于对常规地理信息课程中坐标系讲授方法的不满(对知识背景以设计为主的同学不够友好),尝试换个说法讲解坐标系,希望能帮助各位城乡规划学、建筑学、景观学、设计学(按专业拼音首字母顺序的同学更容易地掌握相关知识;第二,以ArcGIS为例,梳理一下实际坐标、坐标属性、显示坐标、坐标转换等概念和操作,搭建理论到应用的必要桥梁;第三,结合我之前遇到的理论与实际应用脱节的地方,通过示例数据演示坐标对分析的影响,以及如何通过配准操作对数据的空间位置进行统一。考虑到篇幅以及接受难度,预计分为八…呃不,三篇推文发送。


【先聊聊地理坐标系和投影坐标系的关系】

照例先介绍几个基本概念,我尽量让语言通俗易懂,避免过度使用晦涩的专业词汇,说明的重点会放在这些概念之间的关系上。(繁冗严格的定义及相关知识可以查阅文末精心挑选的三篇CSDN博客文章)

平面坐标系:请打开一个CAD,然后随便画点儿什么,恭喜你,你已经成功地使用平面坐标系进行空间的表达了。这里提到的平面坐标系默认指的是平面直角坐标系,可能很多人一辈子也只认识这一种平面坐标系。(测量学老师表示:平面极坐标了解一下)

地理坐标系(Geographic Coordinate Systems):用经纬度表示点在地球表面位置的球面坐标系。X坐标值都在[-180, 180](闭区间,嗯~)之间,Y坐标值都在[-90, 90]之间,以地理坐标系显示世界地图效果如图1。


图1 以地理坐标系显示OSM世界地图


投影方法:为了便于测绘,将球面上的东西搞到平面上的方法,根据不同的目的(保持角度不变/保持面积不变)和区位(都想以自己国家为中心,这样方便用啊)发展出好几种算法和茫茫多的预设参数组合。

投影坐标系(Projected Coordinate Systems):基于一种地理坐标系,采用某种投影方法得到的,用米制距离表示点在地球表面位置的平面坐标系。坐标范围嘛,以OSM能显示的范围为例,X坐标大约是[-20037507, 20037507],Y坐标大约是[-19971869, 19971869],以投影坐标系显示世界地图效果如图2。其中红框范围指示的中国主要地区(除南海九段线以外)范围的X坐标大约是[8153857, 15013954],Y坐标大约是[2027818, 7112111]。



图2 以投影坐标系显示OSM世界地图


简单理解的话,地理坐标系是基础,投影方法是过程(而且是个可逆的过程),投影坐标系是结果。过程所选方法不同,结果就不同,因此一个地理坐标系可以对应多个投影坐标系;但反过来,结果已确定的时候,过程和基础也必然是确定的,因此一个投影坐标系只能对应一个地理坐标系。这么剪不断理还乱的关系对我们来说意味着什么呢,(请容许我不得已地剧透后面要讲的坐标系的名字)如果你拿到的数据是属于WGS 1984(这是一种GCS)的,或者你拿到的数据是属于WGS 1984 UTM Zone 51N或WGS 1984 Web Mercator (auxiliary sphere)(这俩都是基于WGS1984的PCS),那么本质上其实是一样的,属于任何一种投影坐标系的数据,理论上都可以还原到其对应的地理坐标系上,所以不必苛求所有拿来的数据都是地理坐标系,那样就显得外行了

然而,讽刺的是,虽然地理坐标系是球面坐标系,投影坐标系是平面坐标系,但前两张图看起来都是平的啊,这是因为GIS软件以显示平面数据为主,因此在加载地理坐标系的数据时会直接将经纬度坐标当作平面坐标系的坐标进行显示,这个过程不考虑角度形变和面积形变。所以除了Google Earth这种以地球模型展示地理数据的软件以外,投影过程几乎无处不在

投影坐标系是一种有来头(地理坐标系+投影方法)的平面坐标系,而在CAD里随便画点儿什么就是没有来头的平面坐标系,有时会被熟知GIS娇生惯养于完善的数据且尚未熟知我们圈子里CAD为所欲为用法的人称之为“你这个没有坐标啊”(我相信很多人都听过类似的话)


【再聊聊各种常见的地理坐标系】

如果说地理坐标系和与之对应的投影坐标系是内部联系的话,那么不同的地理坐标系之间就是外部联系了。任何两个地理坐标系之间进行转换都需要特殊的方法,值得庆幸的是,已经有很多热心人士为这件恼人的事情提供了解决方案,这里简要介绍一下我们圈子里常见的地理坐标系,以及可用的转换工具和方法。

WGS 1984:简称WGS84,世界上绝大部分开放的数据都属于这个地理坐标系,真的敲好用!对了,你手机里的GPS也和这个有关

GCJ-02:俗称火星坐标,相对正式的名字据说叫做国测局-02坐标(我再说一遍,不是郭采洁-02坐标输入法你够了),一般认为这是一种在WGS 1984基础上做加偏处理的地理坐标,目的是确保国家安全,防止信息泄露,顺便还能给国内的科研人员添堵,一箭三雕。高德地图、腾讯地图等均采用此坐标。

BD-09:百度私人定制的坐标,是一种在GCJ-02基础上再次加偏的地理坐标系,百度坐标系,你值得拥有。

CGCS2000:2000国家大地坐标系,有时候会被误称为GCJ2000,甚至被误当成GCJ-02,作为国测局主推的最新一代坐标系,被寄予一统江湖的厚望,负责将北京1954(这是一种GCS)、西安1980(这也是一种GCS),还有跟安卓系统碎片化程度相仿的各种地方坐标系(一般都是平面坐标系,为了减少坐标值的位数便于使用而移动过原点,想要高精度地配准到常见坐标系上可能需要地方测绘大队的保密参数,或者极大的耐心手动配准)整合起来,对于我们圈子而言,该坐标系似乎尚属罕见。

虽然一些公开的地理坐标系之间有现成的转换参数和方法,但上述坐标之间并没有公开的资料可用,这里推荐一个不错的工具,叫做“万能坐标转换”,由未来交通实验室出品,专治上述前三种坐标系(请点击文末的阅读原文获取)。当然,如果你懂一点儿编程的话,GitHub上面有不少这方面的代码,各种常见的语言平台都有可用的版本,但是,非官方转换方法都是不保证精度的,有强迫症的同学还请移步百度地图开放平台(lbsyun.baidu.com)或高德开放平台(lbs.amap.com),注册并申请开发者密钥,调用官方API转换。那么问题来了,官方API不都是WGS84转GCJ-02或者WGS84转BD-09么,反过来怎么办呢?虽然我们拿不到具体的转换公式,但是,只要有足够多的成对儿的坐标(原始坐标和对应的转换后的坐标),就可以实现近似的坐标转换,这个过程就叫做配准啦(前文好像提前出现这个词了,不好意思


【接下来聊聊两种常见的投影坐标系】

实际上,绝大多数情况都推荐将所持数据的坐标转换为WGS84,除了便于与多数开放数据进行整合外,也便于输出到Google Earth上进行预览和展示(图3)。因此这里主要介绍两种基于WGS84的投影坐标系。


图3 在Google Earth中查看三维建筑物


WGS 1984 Web Mercator (auxiliary sphere):大名鼎鼎的Google Map使用的投影坐标系,这是一个傻瓜式(并没有恶意投影坐标系,只要你拿到的数据是WGS84坐标,那就设置这个准没错。只不过这个投影坐标系常常因精度问题被人诟病,如果你对精度要求很高,那就得用第二个投影坐标系了,准确地说是第二组投影坐标系。

WGS 1984 UTM:这个名字后面还会有一个数字和一个字母,数字在1-60之间,字母为N或S。数字表示不同的适用区域,这个取决于你的数据所在的经度范围,字母表示适用于北半球或者南半球,国内的话当然都是北半球啦(九段线也没超过赤道,我刚在国测局的标准地图服务系统求证过严谨吧~)


【然后还得聊聊坐标系的命名】

坐标系的名字真的很令人绝望,ArcGIS 10.2.2中内置了多达5466个坐标系,WGS 1984显然是其中特别容易识别和记忆的,而且我猜你大概不擅长记住俄罗斯人的名字,比如Krasovsky 1940。如果你到了一个语言不通的地方,唯一能保有纸面交流功能的符号大概就是阿拉伯数字了(虽然我读书少,但我姑且也知道这玩意儿是古印度人发明的),没错,世界上有这么一个组织——EPSG专门给各种坐标系配了编号,在ArcGIS中将这些编号称之为WKID,即Well Known ID,这里有两个数字建议同学们尽量记住,一个是4326(WGS 1984),一个是3857WGS 1984 Web Mercator (auxiliary sphere))。前者是世界上最通用的地理坐标系,后者则是刚刚介绍过的傻瓜式(真的没有恶意)投影坐标系。记住这两个数字的好处,首先是彰显你的专业素养,其次是便于在GIS中快速搜索常用的坐标系,以ArcGIS
10.2.2为例,效果如下(图4、图5)。


图4 输入4326的搜索结果


图5 输入3857的搜索结果


【那么到底什么时候应该设置什么坐标系呢】

这个问题就很好回答了,几乎在任何情况下都应使用投影坐标系,因为投影坐标系是一种平面坐标系,CAD采用的也是平面坐标系,这两者之间才能进行平滑的数据交换。为了减少不必要的麻烦,所有的数据都应尽量转换为WGS84(或与之对应的任何一种投影坐标系),然后使用3857投影坐标系,或根据数据经度范围选择相应的UTM投影坐标系。这里举个坡度分析的例子来说明问题,赤道上两点在投影坐标系下相距30m,高差为0.3m,按照百分比制坡度计算公式,0.3÷30×100%=1%,如果此时使用地理坐标系,则两点相距约0.00027个经度(赤道上1经度约合111km),套用上述公式,则0.3÷0.00027×100%=111111.11%,得到一个极大的坡度值,直接原因是没有采用投影坐标系,而根本原因在于单位的不统一,用m除以经纬度是要闹哪样?!

然而,真正的问题并不在这里,由于坐标值本身并没有足以确定其所属坐标系的特征(毕竟只是一些或大或小的数字而已),所以这里有三个概念,一个是数据所处的真实坐标,一个是数据文件中的坐标属性,还有一个是GIS软件中数据框当前的显示坐标(这些概念在操作篇中还会再次说明,这里先记住有这么三个东西即可)。常见的GIS文件格式如mif和shp是可以内嵌坐标属性的,可是,因为各种各样的原因,坐标属性也可能是空着的,这就需要根据数据来源或数据的分布范围来推测真实坐标,并使坐标属性的参数设置与真实坐标保持一致,否则就会出现错误,比如数据错位、设置投影坐标系后数据不见了等等。也举个例子,在ArcGIS中绘制一个左下角坐标为(-180, -85),右上角坐标为(180, 85)的矩形,以OpenStreetMap为底图,分别将其坐标属性设置为3857和4326,以3857作为显示坐标,结果如下(图6)。


图6 用61200平方米装下整个世界


中间的蓝点是将坐标属性设置为3857的数据,其四角的坐标被软件认为是米制单位坐标,在3857作为显示坐标的情况下,数据落在了原点附近,由于仅有61200平方米,看上去就只剩一个点了。外面的红框是将坐标属性设置为4326的数据,其四角的坐标被软件认为是经纬度坐标,在3857作为显示坐标的情况下,被投影到了地图的边缘,我们竟然用61200平方米几乎装下了整个世界!?

这其中到底还有什么奥秘,正确地“使用”投影坐标系究竟所为何事,三个见鬼的概念之间如何转换又如何统一,你眼中映照的事实和数据背后的真相谁能笑到最后,请继续关注《老生常谈:漫无止境的坐标系(2)操作篇【2018-003】》(就是2018-003没错,002被预定了,月底见)


三则补充说明:

1、虽然想要深入浅出地介绍坐标系理论知识,但写完回头再看还是有点儿复杂啊,如果你看了一遍没看懂的话,就多看几遍吧,也许看了15532次之后就能融会贯通了。

2、这里推荐三篇CSDN上面的技术向博文,推荐想深入学习坐标系知识的同学可点击阅读原文获取HTML快捷方式并按列出的顺序阅读一下。《你必须知道的地理坐标系和投影坐标系》《Arcgis中地理坐标系和投影坐标区别及操作》《Web Mercator 公开的小秘密》

3、在ArcGIS中添加在线地图作为背景的方法有两种,一种是使用现成的插件,例如SimpleGIS,另一种是通过添加WMTS服务来实现。前者较容易上手,后者有空再单写一篇介绍,SimpleGIS安装包可以点击阅读原文获取。

【全文4476字,累计耗时12h35m】

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存